<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数：根据对象的属性，创建对象，动态给添加属性，返回这个对象
        function Hero(name,age,sex,level){
            this.name=name;
            this.age=age;
            this.sex=sex;
            this.level=level;

            this.sing=function(address){
                console.log(`来${address}开演唱会`);
            }
            console.log(this);
        }

        let lan =new Hero('澜',33,true,18);
        let yao=new Hero('瑶',16,false,15);
        console.log(typeof lan);
        console.log(lan.name);
        lan.sing('蓝区');

        /* 
          总结： 
              1.构造函数就是类
              2.通过类这个模块，可以创建对象
              3.类是对公共属性和方法的抽取
        */

        /* 
          构造函数：
             1.作用：创建对象
             2.返回值是一个对象，默认省略
             3，封装的代码是，给对象多态的添加属性和方法
             4.this是当前对象
             5.函数名用大驼峰
             6.配合关键字new使用
             7.构造函数和类是一码事
             8.就是对象公共属性和方法的抽取
             9.属性名和参数尽量保持一致，可读性强。

             约定大于规范，规范大于编码
        */
    </script>
</body>
</html>